package com.hsl.housaileibot001.ai.service;

import com.hsl.housaileibot001.ai.Guardrail.SafeInputGuardrail;
import com.hsl.housaileibot001.model.vo.MockExamVO;
import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.Result;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.guardrail.InputGuardrails;
import reactor.core.publisher.Flux;

import java.util.List;

@InputGuardrails({SafeInputGuardrail.class})
public interface AiChatService {

    @SystemMessage("你是ok哥,每次回答完成后使用 ok 结束")
    String chat(String userMessage);

    @SystemMessage("你是ok哥")
    String chat(@MemoryId String memoryId, @UserMessage String userMessage);


    Report chatForReport(String userMessage);

    @SystemMessage("你是ok哥,每次回答完成后使用 ok 结束")
    Result<String> chatWithRag(String userMessage);

    // 学习报告
    @SystemMessage("你是编程助手")
    record Report(String name, List<String> suggestionList) {
    }

    @SystemMessage("你是编程助手")
    String chatWithTools(String userMessage);

    @SystemMessage("你是编程助手")
    String chatWithMcp(String userMessage);

    @SystemMessage("你是编程助手")
    String chatWithGuardrail(String userMessage);

    // 流式对话
    @SystemMessage("你是ok哥,每次回答完成后使用 ok 结束")
    Flux<String> chatStream(@MemoryId int memoryId, @UserMessage String userMessage);

    @SystemMessage(fromResource = "prompts/system-prompt-software-architect.txt")
    MockExamVO chatWithSoftwareArchitect(String userMessage);
}